package responses

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"net/http"
)

// ApiResult API响应结构
type ApiResult struct {
	Success bool   `json:"success"`        // 响应状态：true为成功，false为失败
	Msg     string `json:"msg,omitempty"`  // 响应消息
	Data    any    `json:"data,omitempty"` // 响应数据
}

// SuccessWithData 携带数据的成功响应
// data 数据
func SuccessWithData(data any) *ApiResult {
	return &ApiResult{
		Success: true,
		Data:    &data,
	}
}

// SuccessWithMsg 携带消息的成功响应
// msg 消息内容
func SuccessWithMsg(format string, a ...any) *ApiResult {
	return &ApiResult{
		Success: true,
		Msg:     fmt.Sprintf(format, a...),
	}
}

// ErrorWithMsg 携带消息的失败响应
// msg 消息内容
func ErrorWithMsg(format string, a ...any) *ApiResult {
	return &ApiResult{
		Success: false,
		Msg:     fmt.Sprintf(format, a...),
	}
}

// Error 携带异常消息的失败响应
// err 异常
func Error(err error) *ApiResult {
	return &ApiResult{
		Success: false,
		Msg:     err.Error(),
	}
}

// SendErrorWithMsg 发送携带消息的失败响应
// ctx gin上下文
// msg 消息内容
func SendErrorWithMsg(ctx *gin.Context, msg string) {
	ctx.JSON(http.StatusOK, ErrorWithMsg(msg))
}
